﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using System.Windows.Controls.Primitives;
using System.Threading;
using System.Globalization;
using System.Collections;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FrmLineasDeProduccion.xaml
    /// </summary>
    public partial class FrmLineasDeProduccion : Window
    {
        #region FJRF - OBJETOS DEL FORMULARIO

        #region FJRF - Variables del formulario
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral

        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataSet DsConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales

        DataTable DtLineasDeProduccion;//FJRF - Para la entrada de materiales

        Boolean BooSeBuscoElCodigoPorElGrid = false;//FJRF - Para saber por donde se estan buscando los datos

        String StrCodigoLinea = "", StrNombreLinea = "", StrProgramacion = "0", StrCorte = "0", StrPreparacion = "0", StrGuarnecida = "0", StrMontaje = "0", StrDespacho = "0", StrDevolucionMedellin = "0", StrDevolucionBogota = "0", StrMuestra = "0";//FJRF - Variables para los datos encontrados
        #endregion
        public FrmLineasDeProduccion()
        {
            InitializeComponent();
        }

        private void WinLineasProduccion_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - Configuracion inicial del sistema
            //FJRF - Titulo del sistema
            string strTituloVentana = "LINEAS DE PRODUCTOS" + " - Usuario:" + MDOgeneral.usuario + " - [FrmLineasDeProduccion]";//FJRF - Armamos el titulo de la ventana
            Title = strTituloVentana;//FJRF - Ponemos el titulo de la ventana
            #endregion

            PttV_ActualizarGrid();//FJRF - Cargamos los datos del grid

            TxtValorMuestra.Style = null;//FJRF - Le quitamos el estilo para poder controlar el foco en este objeto

            TxtCodigo.Focus();//FJRF - Ponemos el foco en este primer control
        }
        private void TxtCodigo_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (TxtCodigo.Text.Trim().Length < 2){BooSeBuscoElCodigoPorElGrid = false;}
            PttV_ConsultarDatoDigitado(TxtCodigo.Text.Trim());//FJRF - Buscamos el dato digitado
        }
        private void TxtValorMuestra_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)//FJRF - Si el usuario presiona enter en este objeto hacemos lo siguiente
            {
                BtnGuardar.Focus();//FJRF - Enviamos el foco a guardar
            }
        }
        private void DtgLineasDeProduccion_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "PROGRAMACION" || strNombreColumna == "CORTE" || strNombreColumna == "PREPARACION" || strNombreColumna == "GUARNECIDA" || strNombreColumna == "MONTAJE" || strNombreColumna == "DESPACHO" || strNombreColumna == "DEVOLUCIONMEDELLIN" || strNombreColumna == "DEVOLUCIONBOGOTA" || strNombreColumna == "MUESTRA")//FJRF - Si alguna de las columnas tiene este nombre hacemos lo siguiente
            {
                Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado
            }
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }
        private void DtgLineasDeProduccion_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            #region FJRF - Extraemos los datos del grid
            DataRowView DrwDatosDelGrid = DtgLineasDeProduccion.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
            DataRow DrFilaDelGrid = DrwDatosDelGrid.Row;//FJRF - Asignamos las finas

            StrCodigoLinea = Convert.ToString(DrFilaDelGrid.ItemArray[0]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrNombreLinea = Convert.ToString(DrFilaDelGrid.ItemArray[1]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            
            StrProgramacion = Convert.ToString(DrFilaDelGrid.ItemArray[2]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrCorte = Convert.ToString(DrFilaDelGrid.ItemArray[3]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrPreparacion = Convert.ToString(DrFilaDelGrid.ItemArray[4]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrGuarnecida = Convert.ToString(DrFilaDelGrid.ItemArray[5]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrMontaje = Convert.ToString(DrFilaDelGrid.ItemArray[6]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrDespacho = Convert.ToString(DrFilaDelGrid.ItemArray[7]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            StrDevolucionMedellin = Convert.ToString(DrFilaDelGrid.ItemArray[8]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrDevolucionBogota = Convert.ToString(DrFilaDelGrid.ItemArray[9]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrMuestra = Convert.ToString(DrFilaDelGrid.ItemArray[10]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            #endregion

            #region FJRF - Validamos que el valor no venga nulo
            if (String.IsNullOrEmpty(StrProgramacion) == true) { StrProgramacion = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrCorte) == true) { StrCorte = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrPreparacion) == true) { StrPreparacion = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrGuarnecida) == true) { StrGuarnecida = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrMontaje) == true) { StrMontaje = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrDespacho) == true) { StrDespacho = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero

            if (String.IsNullOrEmpty(StrDevolucionMedellin) == true) { StrDevolucionMedellin = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrDevolucionBogota) == true) { StrDevolucionBogota = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrMuestra) == true) { StrMuestra = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            #endregion

            #region FJRF - Asignamos los datos encontrados
            TxtCodigo.Text = StrCodigoLinea;//FJRF - Asigamos los datos encontrados
            TxtNombre.Text = StrNombreLinea;//FJRF - Asigamos los datos encontrados

            TxtValorProgramacion.Text = StrProgramacion;//FJRF - Asigamos los datos encontrados
            LblValorProgramacion.Content = Double.Parse(StrProgramacion);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorProgramacion.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorCorte.Text = StrCorte;//FJRF - Asigamos los datos encontrados
            LblValorCorte.Content = Double.Parse(StrCorte);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorCorte.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorPreparacion.Text = StrPreparacion;//FJRF - Asigamos los datos encontrados
            LblValorPreparacion.Content = Double.Parse(StrPreparacion);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorPreparacion.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorGuarnecida.Text = StrGuarnecida;//FJRF - Asigamos los datos encontrados
            LblValorGuarnecida.Content = Double.Parse(StrGuarnecida);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorGuarnecida.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorMontaje.Text = StrMontaje;//FJRF - Asigamos los datos encontrados
            LblValorMontaje.Content = Double.Parse(StrMontaje);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorMontaje.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDespacho.Text = StrDespacho;//FJRF - Asigamos los datos encontrados
            LblValorDespacho.Content = Double.Parse(StrDespacho);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDespacho.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDevolucionMedellin.Text = StrDevolucionMedellin;//FJRF - Asigamos los datos encontrados
            LblValorDevolucionMedellin.Content = Double.Parse(StrDevolucionMedellin);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDevolucionMedellin.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDevolucionBogota.Text = StrDevolucionBogota;//FJRF - Asigamos los datos encontrados
            LblValorDevolucionBogota.Content = Double.Parse(StrDevolucionBogota);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDevolucionBogota.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorMuestra.Text = StrMuestra;//FJRF - Asigamos los datos encontrados
            LblValorMuestra.Content = Double.Parse(StrMuestra);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorMuestra.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}
            #endregion

            BooSeBuscoElCodigoPorElGrid = true;//FJRF - Informamos que el dato se esta encontrando por el grid
        }

        private void DtgLineasDeProduccion_KeyUp(object sender, KeyEventArgs e)
        {
            #region FJRF - Extraemos los datos del grid
            DataRowView DrwDatosDelGrid = DtgLineasDeProduccion.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
            DataRow DrFilaDelGrid = DrwDatosDelGrid.Row;//FJRF - Asignamos las finas

            StrCodigoLinea = Convert.ToString(DrFilaDelGrid.ItemArray[0]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrNombreLinea = Convert.ToString(DrFilaDelGrid.ItemArray[1]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            
            StrProgramacion = Convert.ToString(DrFilaDelGrid.ItemArray[2]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrCorte = Convert.ToString(DrFilaDelGrid.ItemArray[3]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrPreparacion = Convert.ToString(DrFilaDelGrid.ItemArray[4]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrGuarnecida = Convert.ToString(DrFilaDelGrid.ItemArray[5]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrMontaje = Convert.ToString(DrFilaDelGrid.ItemArray[6]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrDespacho = Convert.ToString(DrFilaDelGrid.ItemArray[7]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada

            StrDevolucionMedellin = Convert.ToString(DrFilaDelGrid.ItemArray[8]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrDevolucionBogota = Convert.ToString(DrFilaDelGrid.ItemArray[9]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            StrMuestra = Convert.ToString(DrFilaDelGrid.ItemArray[10]);//FJRF - Traemos el dato en la columna dada de la fila seleccionada
            #endregion

            #region FJRF - Validamos que el valor no venga nulo
            if (String.IsNullOrEmpty(StrProgramacion) == true) { StrProgramacion = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrCorte) == true) { StrCorte = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrPreparacion) == true) { StrPreparacion = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrGuarnecida) == true) { StrGuarnecida = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrMontaje) == true) { StrMontaje = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrDespacho) == true) { StrDespacho = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero

            if (String.IsNullOrEmpty(StrDevolucionMedellin) == true) { StrDevolucionMedellin = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrDevolucionBogota) == true) { StrDevolucionBogota = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            if (String.IsNullOrEmpty(StrMuestra) == true) { StrMuestra = "0"; }//FJRF - Si el valor viene nulo o vacio le enviamos un cero
            #endregion

            #region FJRF - Asignamos los datos encontrados
            TxtCodigo.Text = StrCodigoLinea;//FJRF - Asigamos los datos encontrados
            TxtNombre.Text = StrNombreLinea;//FJRF - Asigamos los datos encontrados

            TxtValorProgramacion.Text = StrProgramacion;//FJRF - Asigamos los datos encontrados
            LblValorProgramacion.Content = Double.Parse(StrProgramacion);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorProgramacion.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorCorte.Text = StrCorte;//FJRF - Asigamos los datos encontrados
            LblValorCorte.Content = Double.Parse(StrCorte);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorCorte.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorPreparacion.Text = StrPreparacion;//FJRF - Asigamos los datos encontrados
            LblValorPreparacion.Content = Double.Parse(StrPreparacion);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorPreparacion.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorGuarnecida.Text = StrGuarnecida;//FJRF - Asigamos los datos encontrados
            LblValorGuarnecida.Content = Double.Parse(StrGuarnecida);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorGuarnecida.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorMontaje.Text = StrMontaje;//FJRF - Asigamos los datos encontrados
            LblValorMontaje.Content = Double.Parse(StrMontaje);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorMontaje.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDespacho.Text = StrDespacho;//FJRF - Asigamos los datos encontrados
            LblValorDespacho.Content = Double.Parse(StrDespacho);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDespacho.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDevolucionMedellin.Text = StrDevolucionMedellin;//FJRF - Asigamos los datos encontrados
            LblValorDevolucionMedellin.Content = Double.Parse(StrDevolucionMedellin);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDevolucionMedellin.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorDevolucionBogota.Text = StrDevolucionBogota;//FJRF - Asigamos los datos encontrados
            LblValorDevolucionBogota.Content = Double.Parse(StrDevolucionBogota);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorDevolucionBogota.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

            TxtValorMuestra.Text = StrMuestra;//FJRF - Asigamos los datos encontrados
            LblValorMuestra.Content = Double.Parse(StrMuestra);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblValorMuestra.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}
            #endregion

            BooSeBuscoElCodigoPorElGrid = true;//FJRF - Informamos que el dato se esta encontrando por el grid
        }

        #region FJRF - Validar solo numero en los campos de valor
        private void TxtValorProgramacion_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorCorte_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorPreparacion_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorGuarnecida_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorMontaje_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorDespacho_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorDevolucionMedellin_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorDevolucionBogota_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        private void TxtValorMuestra_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            //FJRF - Validamos que solo sean numeros
            int ascci = Convert.ToInt32(Convert.ToChar(e.Text));
            if (ascci >= 48 && ascci <= 57) e.Handled = false;
            else e.Handled = true;
        }
        #endregion

        #region FJRF - Le damos formato a los valores digitados
        private void TxtValorProgramacion_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorProgramacion, TxtValorProgramacion.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorCorte_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorCorte, TxtValorCorte.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorPreparacion_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorPreparacion, TxtValorPreparacion.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorGuarnecida_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorGuarnecida, TxtValorGuarnecida.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorMontaje_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorMontaje, TxtValorMontaje.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorDespacho_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorDespacho, TxtValorDespacho.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorDevolucionMedellin_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorDevolucionMedellin, TxtValorDevolucionMedellin.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorDevolucionBogota_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorDevolucionBogota, TxtValorDevolucionBogota.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        private void TxtValorMuestra_TextChanged(object sender, TextChangedEventArgs e)
        {
            PttV_DarFormatoAlValorDigitado(LblValorMuestra, TxtValorMuestra.Text.Trim());//FJRF - Le damos formato al valor digitado
        }
        #endregion

        private void BtnNuevo_Click(object sender, RoutedEventArgs e)
        {
            PttV_Nuevo();//FJRF - Ejecutamos el proceso de nuevo
        }
        private void BtnGuardar_Click(object sender, RoutedEventArgs e)
        {
            PttV_Guardar();//FJRF - Ejecutamos el proceso guardar
        }
        private void BtnEliminar_Click(object sender, RoutedEventArgs e)
        {
            PttV_Eliminar(TxtCodigo.Text.Trim());//FJRF - Eliminamos el dato seleccionado
        }
        private void btnSalir_Click(object sender, RoutedEventArgs e)
        {
            this.Close();//FJRF - Nos salimos
        }
        #endregion

        #region FJRF - PROCEDIMIENTOS Y FUNCIONES DEL FORMULARIO
        protected void PttV_DarFormatoAlValorDigitado(Label LblFormato, String StrValorDigitado)
        {
            if (String.IsNullOrEmpty(StrValorDigitado) == true)//FJRF - Si el valor llega nulo entonces o vacio entonces hacemos lo siguiente
            {
                StrValorDigitado = "0";//FJRF - Enviamos un cero
            }
            LblFormato.Content = Double.Parse(StrValorDigitado);//FJRF - Asigamos los datos encontrados pero enviandolo de forma numerica para poder aplicar un formato al dato
            LblFormato.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}
        }
        protected void PttV_Limpiar()
        {
            TxtNombre.Text = "";//FJRF - Limpiamos los datos

            TxtValorProgramacion.Text = "";//FJRF - Limpiamos los datos
            TxtValorCorte.Text = "";//FJRF - Limpiamos los datos
            TxtValorPreparacion.Text = "";//FJRF - Limpiamos los datos
            TxtValorGuarnecida.Text = "";//FJRF - Limpiamos los datos
            TxtValorMontaje.Text = "";//FJRF - Limpiamos los datos
            TxtValorDespacho.Text = "";//FJRF - Limpiamos los datos

            TxtValorDevolucionMedellin.Text = "";//FJRF - Limpiamos los datos
            TxtValorDevolucionBogota.Text = "";//FJRF - Limpiamos los datos
            TxtValorMuestra.Text = "";//FJRF - Limpiamos los datos
        }
        protected void PttV_Nuevo()
        {
            PttV_Limpiar();//FJRF - Limpiamos los datos

            TxtCodigo.Text = "";//FJRF - Limpiamos el codigo
            TxtCodigo.Focus();//FJRF - Enviamos el foco a este objeto
        }
        protected void PttV_ConsultarDatoDigitado(String StrCodigoDigitado)
        {
            if (StrCodigoDigitado.Trim().Length == 2 && BooSeBuscoElCodigoPorElGrid == false)//FJRF - Si el codigo digitado es igual a dos y en un dato digitado hacemos lo siguiente
            {
                StrConsulta = "SELECT * ";//FJRF - Armamos la consulta
                StrConsulta = StrConsulta + "FROM MAELINP ";//FJRF - Armamos la consulta
                StrConsulta = StrConsulta + "WHERE CODLIN_LNP = '" + StrCodigoDigitado + "' ";//FJRF - Armamos la consulta

                DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Traemos los datos

                if (DtConsulta.Rows.Count > 0)//FJRF - Si hay datos hacemos lo siguiente
                {
                    TxtNombre.Text = DtConsulta.Rows[0][1].ToString();//FJRF - Asiganamos los datos encontrados

                    TxtValorProgramacion.Text = DtConsulta.Rows[0][2].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorCorte.Text = DtConsulta.Rows[0][3].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorPreparacion.Text = DtConsulta.Rows[0][4].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorGuarnecida.Text = DtConsulta.Rows[0][5].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorMontaje.Text = DtConsulta.Rows[0][6].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorDespacho.Text = DtConsulta.Rows[0][7].ToString();//FJRF - Asiganamos los datos encontrados

                    TxtValorDevolucionMedellin.Text = DtConsulta.Rows[0][8].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorDevolucionBogota.Text = DtConsulta.Rows[0][9].ToString();//FJRF - Asiganamos los datos encontrados
                    TxtValorMuestra.Text = DtConsulta.Rows[0][10].ToString();//FJRF - Asiganamos los datos encontrados
                }
            }
            else//FJRF - Si no tiene la longitud correcta hacemos lo siguiente
            {
                PttV_Limpiar();//FJRF - Limpiamos los datos
            }
        }
        protected void PttV_ActualizarGrid()
        {
            StrConsulta = "SELECT CODLIN_LNP AS CODIGO,  NOMLIN_LNP AS NOMBRE,  COSPRG_LNP AS PROGRAMACION,  COSCOR_LNP AS CORTE,  COSPRP_LNP AS PREPARACION,  COSGUA_LNP AS GUARNECIDA,  COSMON_LNP AS MONTAJE,  COSDES_LNP AS DESPACHO, COSDEVMED_LNP AS DEVOLUCIONMEDELLIN,  COSDEVBOG_LNP AS DEVOLUCIONBOGOTA,  COSMUESTRA_LNP AS MUESTRA ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "FROM MAELINP ";//FJRF - Armamos la consulta
            StrConsulta = StrConsulta + "ORDER BY NOMLIN_LNP ";//FJRF - Armamos la consulta

            DtLineasDeProduccion = MdoGeneral.consulta(StrConsulta);//FJRF - Traemos los datos
            DtgLineasDeProduccion.ItemsSource = DtLineasDeProduccion.DefaultView;//FJRF - cargamos el grid con los datos consultados
        }
        protected String PttStr_ValidarSiSePuedeGuardar()
        {
            String StrDatoRetornado = "";//FJRF - Variable que contendra el dato retornado por el cual no se puede guardar

            if (TxtCodigo.Text.Trim() == "")//FJRF - Si no tiene nombre hacemos lo siguiente
            {
                StrDatoRetornado = "Falta digitar el codigo";
                TxtCodigo.Focus();//FJRF - Envimos el foco al objeto
            }
            if (TxtCodigo.Text.Trim().Length < 2)//FJRF - Si no tiene nombre hacemos lo siguiente
            {
                StrDatoRetornado = "El codigo debe ser de dos caracteres";
                TxtCodigo.Focus();//FJRF - Envimos el foco al objeto
            }
            if (TxtNombre.Text.Trim() == "")//FJRF - Si no tiene nombre hacemos lo siguiente
            {
                StrDatoRetornado = "Falta digitar el nombre";
                TxtNombre.Focus();//FJRF - Envimos el foco al objeto
            }

            #region FJRF - Ponemos un cero la los valores sin datos
            if (TxtValorProgramacion.Text.Trim() == "") { TxtValorProgramacion.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorCorte.Text.Trim() == "") { TxtValorCorte.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorPreparacion.Text.Trim() == "") { TxtValorPreparacion.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorGuarnecida.Text.Trim() == "") { TxtValorGuarnecida.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorMontaje.Text.Trim() == "") { TxtValorMontaje.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorDespacho.Text.Trim() == "") { TxtValorDespacho.Text = "0"; }//FJRF - Si no tiene datos ponemos cero

            if (TxtValorDevolucionMedellin.Text.Trim() == "") { TxtValorDevolucionMedellin.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorDevolucionBogota.Text.Trim() == "") { TxtValorDevolucionBogota.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            if (TxtValorMuestra.Text.Trim() == "") { TxtValorMuestra.Text = "0"; }//FJRF - Si no tiene datos ponemos cero
            #endregion

            return StrDatoRetornado;//FJRF - Retornamos el motivo por el que no se puede grabar
        }
        protected void PttV_Guardar()
        {
            String StrMensaje = PttStr_ValidarSiSePuedeGuardar();//FJRF - Miramos si se puede guardar

            if (StrMensaje == "")//FJRF - Si no trae mensaje hacemos lo siguiente
            {
                StrConsulta = "SELECT * ";//FJRF - Armamos la consulta
                StrConsulta = StrConsulta + "FROM MAELINP ";//FJRF - Armamos la consulta
                StrConsulta = StrConsulta + "WHERE CODLIN_LNP = '" + TxtCodigo.Text.Trim() + "' ";//FJRF - Armamos la consulta

                DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Traemos los datos

                if (DtConsulta.Rows.Count > 0)//FJRF - Si hay datos hacemos lo siguiente
                {
                    StrConsulta = "UPDATE MAELINP SET ";//FJRF - Actualizamos la tabla
                    StrConsulta = StrConsulta + "NOMLIN_LNP  = '" + TxtNombre.Text.Trim() + "',  COSPRG_LNP  = '" + TxtValorProgramacion.Text.Trim() + "',  COSCOR_LNP = '" + TxtValorCorte.Text.Trim() + "',  COSPRP_LNP = '" + TxtValorPreparacion.Text.Trim() + "',  COSGUA_LNP = '" + TxtValorGuarnecida.Text.Trim() + "',  COSMON_LNP = '" + TxtValorMontaje.Text.Trim() + "',  COSDES_LNP = '" + TxtValorDespacho.Text.Trim() + "', COSDEVMED_LNP = '" + TxtValorDevolucionMedellin.Text.Trim() + "',  COSDEVBOG_LNP = '" + TxtValorDevolucionBogota.Text.Trim() + "',  COSMUESTRA_LNP = '" + TxtValorMuestra.Text.Trim() + "' ";//FJRF - Con los campos
                    StrConsulta = StrConsulta + "WHERE CODLIN_LNP = '" + TxtCodigo.Text.Trim() + "' ";//FJRF - Cuando el codigo sea este
                }
                else//FJRF - Si el dato no existe entonces hacemos lo siguiente
                {
                    StrConsulta = "INSERT INTO MAELINP ( ";//FJRF - armamos la consulta
                    StrConsulta = StrConsulta + "CODLIN_LNP,  NOMLIN_LNP,  COSPRG_LNP,  COSCOR_LNP,  COSPRP_LNP,  COSGUA_LNP,  COSMON_LNP,  COSDES_LNP,  COSDEVMED_LNP,  COSDEVBOG_LNP,  COSMUESTRA_LNP ";//FJRF - armamos la consulta
                    StrConsulta = StrConsulta + ") ";//FJRF - armamos la consulta
                    StrConsulta = StrConsulta + "VALUES ( ";//FJRF - armamos la consulta
                    StrConsulta = StrConsulta + " '" + TxtCodigo.Text.Trim() + "',  '" + TxtNombre.Text.Trim() + "',  '" + TxtValorProgramacion.Text.Trim() + "',  '" + TxtValorCorte.Text.Trim() + "',  '" + TxtValorPreparacion.Text.Trim() + "',  '" + TxtValorGuarnecida.Text.Trim() + "',  '" + TxtValorMontaje.Text.Trim() + "',  '" + TxtValorDespacho.Text.Trim() + "', '" + TxtValorDevolucionMedellin.Text.Trim() + "',  '" + TxtValorDevolucionBogota.Text.Trim() + "',  '" + TxtValorMuestra.Text.Trim() + "' ";//FJRF - armamos la consulta
                    StrConsulta = StrConsulta + ") ";//FJRF - armamos la consulta
                }
                MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta que guarda o actualiza

                PttV_ActualizarGrid();//FJRF - Actualizamos los datos del grid

                MessageBox.Show("Información guardada con exito", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos mensaje de cancelación
            }
            else//FJRF - Si tiene algun proceso que no permite grabar hacemos lo siguiente
            {
                MessageBox.Show(StrMensaje, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje informando al usario
            }
        }
        protected void PttV_Eliminar(String StrCodigoAEliminar)
        {
            #region FJRF - PreguntamosSiQueremosGuardar
            String StrCaptionBox = "Confirmation";
            String StrMensajeBox = "Esta seguro de eliminar el codigo [ " + StrCodigoAEliminar + " ] ?";
            MessageBoxButton buttons = MessageBoxButton.YesNo;
            MessageBoxImage icon = MessageBoxImage.Question;
            #endregion

            if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)//FJRF - Si el usuario quiere guardar hacemos lo siguiente
            {
                try
                {
                    StrConsulta = "DELETE FROM MAELINP ";//FJRF - Actualizamos la tabla
                    StrConsulta = StrConsulta + "WHERE CODLIN_LNP = '" + StrCodigoAEliminar + "' ";//FJRF - Cuando el codigo sea este

                    MdoGeneral.comando(StrConsulta);//FJRF - Ejecutamos la consulta que guarda o actualiza
                    PttV_ActualizarGrid();//FJRF - Actualizamos los datos del grid

                    MessageBox.Show("Información eliminada con exito", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos mensaje de cancelación

                    PttV_Nuevo();//FJRF - Ejecutamos el proceso nuevo
                }
                catch (Exception ex)
                {
                    Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Pone el cursor de forma normal
                    MessageBox.Show(ex.Message);//FJRF - Si se genera un error informamos al usuario que paso
                }
            }
            else//FJRF - Si el usuario no quieres guardar hacemos lo siguiente
            {
                MessageBox.Show("El codigo no fue eliminado", "PROCESO CANCELADO", MessageBoxButton.OK,MessageBoxImage.Stop);//FJRF - Enviamos mensaje de cancelación
            }

        }
        #endregion
    }
}
